home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / gfaxpert.lzh / GFAXPERT.LIB / GRAPH1.LST < prev    next >
File List  |  1986-10-19  |  7KB  |  308 lines

  1. ' ******************
  2. ' *** GRAPH1.LST ***
  3. ' ******************
  4. '
  5. DEFWRD "a-z"
  6. '
  7. > PROCEDURE click.point(txt$,VAR x,y)
  8.   ' *** choose point (x,y) with mouse-click
  9.   ' *** uses Procedure Message.on and Message.off
  10.   LOCAL x1,y1,x2,y2,k
  11.   DEFMOUSE 3
  12.   SHOWM
  13.   @message.on(txt$)
  14.   x1=MOUSEX
  15.   y1=MOUSEY
  16.   REPEAT
  17.     MOUSE x2,y2,k
  18.   UNTIL x2<>x1 OR y2<>y1
  19.   @message.off
  20.   REPEAT
  21.   UNTIL MOUSEK               ! wait for click
  22.   x=MOUSEX
  23.   y=MOUSEY
  24.   HIDEM
  25.   DEFMOUSE 0
  26.   PAUSE 10                   ! short pause for release of button
  27. RETURN
  28. ' **********
  29. '
  30. > PROCEDURE rubber.line(x,y,VAR x2,y2)
  31.   ' *** draw line from point (x,y) to position of mouse (x2,y2)
  32.   ' *** confirm with mouse-click
  33.   ' *** uses Procedure Message.on and Message.off
  34.   LOCAL mx1,my1,mx2,my2,x1,y1,x2,y2,k
  35.   GRAPHMODE 3
  36.   @message.on("draw line (confirm with click)")
  37.   DEFMOUSE 3
  38.   SHOWM
  39.   mx1=MOUSEX
  40.   my1=MOUSEY
  41.   REPEAT
  42.     MOUSE mx2,my2,k
  43.   UNTIL mx2<>mx1 OR my2<>my1
  44.   @message.off
  45.   MOUSE x1,y1,k
  46.   REPEAT
  47.     LINE x,y,x1,y1
  48.     REPEAT
  49.       MOUSE x2,y2,k
  50.     UNTIL x2<>x1 OR y2<>y1 OR k>0
  51.     LINE x,y,x1,y1
  52.     x1=x2
  53.     y1=y2
  54.   UNTIL k>0
  55.   GRAPHMODE 1
  56.   LINE x,y,x2,y2
  57.   HIDEM
  58.   DEFMOUSE 0
  59.   PAUSE 10
  60. RETURN
  61. ' **********
  62. '
  63. > PROCEDURE draw.line(VAR x1,y1,x2,y2)
  64.   ' *** draw line
  65.   ' *** uses Procedure Click.point and Rubber.line
  66.   @click.point("click on starting point of line",x1,y1)
  67.   @rubber.line(x1,y1,x2,y2)
  68. RETURN
  69. ' **********
  70. '
  71. > PROCEDURE rubber.box(x,y,VAR width,heigth)
  72.   ' *** draw rectangle (left upper corner already chosen)
  73.   ' *** uses Procedure Message.on and Message.off
  74.   LOCAL mx1,my1,mx2,my2,x1,y1,x2,y2,k
  75.   GRAPHMODE 3
  76.   @message.on("draw rectangle (confirm with click)")
  77.   mx1=MOUSEX
  78.   my1=MOUSEY
  79.   REPEAT
  80.     MOUSE mx2,my2,k
  81.   UNTIL mx2<>mx1 OR my2<>my1
  82.   @message.off
  83.   MOUSE x1,y1,k
  84.   REPEAT
  85.     BOX x,y,x1,y1
  86.     PLOT x,y
  87.     REPEAT
  88.       MOUSE x2,y2,k
  89.     UNTIL (x2<>x1 AND x2>x) OR (y2<>y1 AND y2>y) OR k>0
  90.     BOX x,y,x1,y1
  91.     PLOT x,y
  92.     x1=x2
  93.     y1=y2
  94.   UNTIL k>0
  95.   GRAPHMODE 1
  96.   BOX x,y,x2,y2
  97.   width=x2-x
  98.   height=y2-y
  99.   PAUSE 10
  100. RETURN
  101. ' **********
  102. '
  103. > PROCEDURE draw.box(VAR x,y,width,height)
  104.   ' *** draw rectangle
  105.   ' *** uses Procedure Click.point and Rubber.box
  106.   LOCAL x1,y1,width,height
  107.   @click.point("click on left upper corner of rectangle",x,y)
  108.   @rubber.box(x,y,width,height)
  109. RETURN
  110. ' **********
  111. '
  112. > PROCEDURE rubber.square(x,y,VAR width)
  113.   ' *** draw square (left upper corner already chosen)
  114.   ' *** uses Procedure Message.on and Message.off
  115.   LOCAL mx1,my1,mx2,my2,x1,y1,x2,y2,k,side
  116.   GRAPHMODE 3
  117.   HIDEM
  118.   @message.on("draw square (confirm with click)")
  119.   mx1=MOUSEX
  120.   my1=MOUSEY
  121.   REPEAT
  122.     MOUSE mx2,my2,k
  123.   UNTIL mx2<>mx1 OR my2<>my1
  124.   @message.off
  125.   MOUSE x1,y1,k
  126.   REPEAT
  127.     IF (x1-x)>(y1-y)
  128.       side=x1-x
  129.     ELSE
  130.       side=y1-y
  131.     ENDIF
  132.     BOX x,y,x+side,y+side
  133.     PLOT x,y
  134.     REPEAT
  135.       MOUSE x2,y2,k
  136.     UNTIL (x2<>x1 AND x2>x) OR (y2<>y1 AND y2>y) OR k>0
  137.     BOX x,y,x+side,y+side
  138.     PLOT x,y
  139.     x1=x2
  140.     y1=y2
  141.   UNTIL k>0
  142.   GRAPHMODE 1
  143.   BOX x,y,x+side,y+side
  144.   width=side
  145.   PAUSE 10
  146. RETURN
  147. ' **********
  148. '
  149. > PROCEDURE draw.square(VAR x,y,width)
  150.   ' *** draw square
  151.   ' *** uses Procedure Click.point and Rubber.square
  152.   @click.point("click on left upper corner of square",x,y)
  153.   @rubber.square(x,y,width)
  154. RETURN
  155. ' **********
  156. '
  157. > PROCEDURE drag.box(width,height,VAR x,y)
  158.   ' *** drag rectangle
  159.   ' *** place rectangle after mouse-click
  160.   ' *** uses Procedure Message.on and Message.off
  161.   LOCAL mx1,my1,mx2,my2,x1,y1,x2,y2,k
  162.   GRAPHMODE 3
  163.   HIDEM
  164.   @message.on("drag rectangle (place with click)")
  165.   mx1=MOUSEX
  166.   my1=MOUSEY
  167.   REPEAT
  168.     MOUSE mx2,my2,k
  169.   UNTIL mx2<>mx1 OR my2<>my1
  170.   @message.off
  171.   MOUSE x1,y1,k
  172.   REPEAT
  173.     BOX x1,y1,x1+width,y1+height
  174.     PLOT x1,y1
  175.     REPEAT
  176.       MOUSE x2,y2,k
  177.     UNTIL x2<>x1 OR y2<>y1 OR k>0
  178.     BOX x1,y1,x1+width,y1+height
  179.     PLOT x1,y1
  180.     x1=x2
  181.     y1=y2
  182.   UNTIL k>0
  183.   GRAPHMODE 1
  184.   BOX x2,y2,x2+width,y2+height
  185.   x=x2
  186.   y=y2
  187.   PAUSE 10
  188. RETURN
  189. ' **********
  190. '
  191. > PROCEDURE move.box(width,height,x1,y1,x2,y2)
  192.   ' *** move rectangle from x1,y1 to x2,y2
  193.   LOCAL x,y
  194.   GRAPHMODE 3
  195.   IF x1<x2 AND y1<y2
  196.     @p1
  197.   ELSE
  198.     IF x1<x2 AND y1>=y2
  199.       @p2
  200.     ELSE
  201.       IF x1>=x2 AND y1<y2
  202.         @p3
  203.       ELSE
  204.         @p4
  205.       ENDIF
  206.     ENDIF
  207.   ENDIF
  208.   GRAPHMODE 1
  209.   BOX x2,y2,x2+width,y2+height
  210. RETURN
  211. ' ***
  212. > PROCEDURE p1
  213.   FOR x=x1 TO x2
  214.     BOX x,y1,x+width,y1+height
  215.     BOX x,y1,x+width,y1+height
  216.   NEXT x
  217.   FOR y=y1 TO y2
  218.     BOX x,y,x+width,y+height
  219.     BOX x,y,x+width,y+height
  220.   NEXT y
  221. RETURN
  222. ' ***
  223. > PROCEDURE p2
  224.   FOR x=x1 TO x2
  225.     BOX x,y1,x+width,y1+height
  226.     BOX x,y1,x+width,y1+height
  227.   NEXT x
  228.   FOR y=y1 DOWNTO y2
  229.     BOX x,y,x+width,y+height
  230.     BOX x,y,x+width,y+height
  231.   NEXT y
  232. RETURN
  233. ' ***
  234. > PROCEDURE p3
  235.   FOR x=x1 DOWNTO x2
  236.     BOX x,y1,x+width,y1+height
  237.     BOX x,y1,x+width,y1+height
  238.   NEXT x
  239.   FOR y=y1 TO y2
  240.     BOX x,y,x+width,y+height
  241.     BOX x,y,x+width,y+height
  242.   NEXT y
  243. RETURN
  244. ' ***
  245. > PROCEDURE p4
  246.   FOR x=x1 DOWNTO x2
  247.     BOX x,y1,x+width,y1+height
  248.     BOX x,y1,x+width,y1+height
  249.   NEXT x
  250.   FOR y=y1 DOWNTO y2
  251.     BOX x,y,x+width,y+height
  252.     BOX x,y,x+width,y+height
  253.   NEXT y
  254. RETURN
  255. ' **********
  256. '
  257. > PROCEDURE grow.box(width,height,x,y,pause)
  258.   ' *** draw 'growing' rectangle
  259.   ' *** pause determines grow-speed
  260.   LOCAL x1,y1,l,step.x,step.y,n,delta.x,delta.y
  261.   GRAPHMODE 3
  262.   x1=x+width/2
  263.   y1=y+height/2
  264.   l=MIN(height/2,width/2)
  265.   step.x=(width/2)/l
  266.   step.y=(height/2)/l
  267.   FOR n=1 TO l
  268.     delta.x=n*step.x
  269.     delta.y=n*step.y
  270.     BOX x1-delta.x,y1-delta.y,x1+delta.x,y1+delta.y
  271.     PLOT x1-delta.x,y1-delta.y
  272.     PAUSE pause
  273.     BOX x1-delta.x,y1-delta.y,x1+delta.x,y1+delta.y
  274.     PLOT x1-delta.x,y1-delta.y
  275.   NEXT n
  276.   GRAPHMODE 1
  277.   BOX x,y,x+width,y+height
  278. RETURN
  279. ' **********
  280. '
  281. > PROCEDURE shrink.box(width,height,x,y,pause)
  282.   ' *** draw 'shrinking' rectangle
  283.   ' *** pause determines shrink-speed
  284.   LOCAL x1,y1,l,step.x,step.y,n,delta.x,delta.y
  285.   GRAPHMODE 3
  286.   x1=x+width/2
  287.   y1=y+height/2
  288.   l=MIN(height/2,width/2)
  289.   step.x=(width/2)/l
  290.   step.y=(height/2)/l
  291.   BOX x,y,x+width,y+height
  292.   PLOT x,y
  293.   BOX x,y,x+width,y+height
  294.   PLOT x,y
  295.   FOR n=l DOWNTO 1
  296.     delta.x=n*step.x
  297.     delta.y=n*step.y
  298.     BOX x1-delta.x,y1-delta.y,x1+delta.x,y1+delta.y
  299.     PLOT x1-delta.x,y1-delta.y
  300.     PAUSE pause
  301.     BOX x1-delta.x,y1-delta.y,x1+delta.x,y1+delta.y
  302.     PLOT x1-delta.x,y1-delta.y
  303.   NEXT n
  304.   GRAPHMODE 1
  305. RETURN
  306. ' **********
  307. '
  308.